#include <iostream>
#include <random>
#include <sstream>
#include <iomanip>
#include <atomic>

// int main()
// {
//     // std::random_device rd;

//     // size_t num = rd(); // 机器随机数，效率低，因为是靠硬件生成的
//     // std::cout << num <<std::endl;

//     std::random_device rd;
//     std::mt19937_64 generator(rd());
//     std::cout << generator() << std::endl; // 使用真机器随机数当种子，然后生成伪随机数，效率更快

//     // 限定数字区间
//     std::uniform_int_distribution<int> distribution(0, 255);
//     std::cout << distribution(generator) << std::endl;

//     // 将数字转为16进制并限制宽度和前置填充0
//     int x = distribution(generator);
//     std::stringstream ss;
//     ss << std::setw(2) << std::setfill('0') << std::hex << x;
//     std::cout << x << "的16进制是: ";
//     std::cout << ss.str() << std::endl;

//     return 0;
// }

// 8-4-4-4-12
std::string uuid()
{
    std::random_device rd;
    std::mt19937_64 generator(rd());
    std::uniform_int_distribution<int> distribution(0, 255);
    std::stringstream ss;
    for (int i = 0; i < 8; i++)
    {
        ss << std::setw(2) << std::setfill('0') << std::hex << distribution(generator);
        // 8-4-4-
        if (i == 3 || i == 5 || i == 7)
            ss << "-";
    }
    static std::atomic<size_t> seq(1);
    size_t num = seq.fetch_add(1);
    for (int i = 7; i >= 0; i--)
    {
        ss << std::setw(2) << std::setfill('0') << std::hex << (num >> (i * 8) & 0xff);
        if (i == 6)
            ss << "-";
    }

    return ss.str();
}
int main()
{
    for (int i = 0; i < 20; i++)
    {
        std::cout << uuid() << std::endl;
    }

    return 0;
}